// 每次可以连接相邻的两个珠子，直到珠子只剩一个
// 是一个区间dp的问题

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 210;
int n;
int w[N], f[N][N];

// 由于题目给出了最大能量不超过int范围，不需要高精度
int main()
{
    cin >> n;
    for (int i = 1; i <= n; ++i)
    {
        cin >> w[i];
        w[i + n] = w[i];
    }

    // 最终情况是头部和尾部都是相同位置的数
    for (int len = 3; len <= n + 1; ++len)
        for (int l = 1; l + len - 1 <= 2 * n; ++l)
        {
            int r = l + len - 1;
            for (int k = l + 1; k < r; ++k)
                f[l][r] = max(f[l][r], f[l][k] + f[k][r] + w[l] * w[r] * w[k]);
        }
    int maxv = 0;
    for (int i = 1; i <= n; ++i)
        maxv = max(maxv, f[i][i + n]);
    cout << maxv << endl;
    return 0;
}
